<?php
/**
 * Base.class.php
 * 
 * pdk框架基类,用于被其它类继承。
 * 
 * @author lsl <470663151@qq.com> 
 * @copyright Copyright (c) 2012 lsl8966 Software Studio
 * @link http://www.cnblogs.com/lsl8966
 * @version $Id: AutoLoad.class.php 1.0 2012-01-18 22:48:01Z lsl $
 * @package core
 * @since 1.0
 */

namespace gps\lib;
abstract class Base{
    /**
     * 实例化的存储数组
     */
     private static $_instance = array();
    
    /**
     * 自动变量设置
     * 
     * 程序运行时自动完成类中作用域为protected及private的变量的赋值 。
     * 
     * @access public 
     * @param string $name 属性名
     * @param string $value 属性值
     * @return void 
     */
     public function __set($name, $value){
        
         if (property_exists($this, $name)){
            
             $this -> $name = $value;
             }
         }
    
    /**
     * 自动变量获取
     * 
     * 程序运行时自动完成类中作用域为protected及private的变量的获取。
     * 
     * @access public 
     * @param string $name 属性名
     * @return mixed 
     */
     public function __get($name){
        
         return isset($this -> $name) ? $this -> $name : false;
         }
    
    /**
     * 函数: __call()
     * 
     * 用于处理类外调用本类不存在的方法时的信息提示
     * 
     * @access public 
     * @param string $method 方法名称
     * @param string $args 参数名称
     * @return string 
     */
     public function __call($method, array $args){
        
         echo 'Method:' . $method . '() is not exists in Class:' . get_class($this) . '!<br/>The args is:<br/>';
         foreach ($args as $value){
             echo $value, '<br/>';
             }
         }
    
    /**
     * 输出类的实例化对象

     * 直接调用函数，输出内容。
     * 
     * @access public 
     * @return string 
     */
     public function __toString(){
        
         return (string)'This is ' . get_class($this) . ' Class!';
     }
    
    /**
     * 取得对象实例 支持调用类的静态方法
     * 
     * @param string $class 对象类名
     * @param string $method 类的静态方法名
     * @return object 
     */
     static public function instance($class, $method = ''){
        
        /**
         * 获取对象实例标实
         */
         $identify = $class . $method;
         if(!isset(self :: $_instance[$identify])){
            /**
             * 是否存在类
             */
             if(class_exists($class)){
                 $o = new $class();
                 if(!empty($method) && method_exists($o, $method)){
                     self :: $_instance[$identify] = call_user_func_array(array(& $o, $method));
                     }else{
                     self :: $_instance[$identify] = $o;
                     }
                
                 }else{
                 echo ('error = ' . $class . ' , ' . $method);
                 }
             }
         return self :: $_instance[$identify];
         }
    
    }
